#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>

//int main()
//{
//	int a = 0;
//	printf("%d\n", a);
//	scanf("%d", &a);
//	printf("%d\n", a);
//	return 0;
//}


//int main()
//{
//	int a = 20;
//	//存储的是20的补码的二进制
//	return 0;
//}

//#include <stdio.h>
//int main()
//{
//	int a = 10000;
//	FILE* pf = fopen("test.txt", "wb");//以二进制写的方式打开文件
//	fwrite(&a, 4, 1, pf);//⼆进制的形式写到⽂件中
//	fclose(pf);//关闭文件
//	pf = NULL;//置为空指针
//	return 0;
//}

//int main()
//{
//	int a = 10000;
//	return 0;
//}

//int main()
//{
//	//打开成功返回有效地址,打开失败,返回NULL
//	FILE* pf = fopen("F:\\Documents\\桌面\\test.txt", "w");//打开文件
//	//                绝对路径
//	if (pf == NULL)//判断是否为空指针
//	{
//		perror("fopen");
//		return 1;
//	}
//
//	//读,写文件
//	//.......
//
//	fclose(pf);//关闭文件
//	pf = NULL;//置为空指针
//	return 0;
//}


//int main()
//{
//	FILE* pf = fopen(".\\..\\test.txt", "w");
//	//.表示当前路径
//	//..表示上一级路径
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//
//	//读,写文件
//	//.......
//
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}

//int main()
//{
//	//打开文件
//	FILE* pf = fopen("test.txt", "w");//写的方式,没有文件新建文件,有文件清空内容
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//	//写文件
//	fputc('q',pf);//写入字符q
//	fputc('w',pf);
//	fputc('e',pf);
//	fputc('r',pf);
//	fputc('t',pf);
//
//	//关闭文件
//	fclose(pf);
//	pf = NULL;//置为空指针,否则会是野指针
//	return 0;
//}


//int main()
//{
//	FILE* pf = fopen("test.txt", "w");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//	for (int i = 'a'; i <= 'z'; i++)
//	{
//		fputc(i, pf);
//	}
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}

//int main()
//{
//	FILE* pf = fopen("test.txt", "r");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//	int i = fgetc(pf);
//	printf("%c\n", i);
//	i = fgetc(pf);
//	printf("%c\n", i);
//	i = fgetc(pf);
//	printf("%c\n", i);
//	i = fgetc(pf);
//	printf("%c\n", i);
//	i = fgetc(pf);
//	printf("%c\n", i);
//
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}

//int main()
//{
//	FILE* pf = fopen("test.txt", "r");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//	int ch = 0;
//	while ((ch = fgetc(pf)) != EOF)
//	{
//		printf("%c ", ch);
//	}
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}


//int main()
//{
//	int ch = fgetc(stdin);
//	fputc(ch, stdout);
//	return 0;
//}

//int main()
//{
//	FILE* pf = fopen("test.txt", "w");
//	if (pf == NULL)
//	{
//		perror(pf);
//		return 1;
//	}
//
//	char* p = "hello world!\n";
//	fputs(p, pf);
//	fputs("are you ok?\n", pf);
//
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}

//int main()
//{
//	FILE* pf = fopen("test.txt", "r");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//	char arr[20] = "xxxxxxxxxxxxxxxx";
//	fgets(arr, 15, pf);
//	printf("%s\n", arr);
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}

//int main()
//{
//	char arr[20] = { '\0' };
//	fgets(arr, 20, stdin);
//	fputs(arr, stdout);
//	return 0;
//}

//struct Stu
//{
//	char name[20];
//	int age;
//	float score;
//};
//
//int main()
//{
//	struct Stu s = { "LiXiangSi",20,99.5 };
//	FILE* pf = fopen("test.txt", "w");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//	fprintf(pf, "%s %d %.1f",s.name,s.age,s.score);
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}

//struct Stu
//{
//	char name[20];
//	int age;
//	float score;
//};
//int main()
//{
//	struct Stu s = { 0 };
//	FILE* pf = fopen("test.txt", "r");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//	fscanf(pf, "%s %d %f", s.name, &(s.age), &(s.score));
//	printf("%s %d %.1f\n", s.name, s.age, s.score);
//	fprintf(stdout,"%s %d %.1f\n", s.name, s.age, s.score);
//	return 0;
//}
//struct Stu
//{
//	char name[20];
//	int age;
//	float score;
//};
//int main()
//{
//	char ch[100] = { '\0' };
//	struct Stu s = { "Aurora",20,96.5f };
//	sprintf(ch, "%s %d %f", s.name, s.age, s.score);
//	printf("%s\n", ch);
//	return 0;
//}

//struct Stu
//{
//	char name[20];
//	int age;
//	float score;
//};
//int main()
//{
//	char ch[100] = { '\0' };
//	struct Stu tem = { 0 };
//	struct Stu s = { "Aurora",20,96.5f };
//	//将格式化数据提取成字符串
//	sprintf(ch, "%s %d %f", s.name, s.age, s.score);
//	//从字符串中提取格式化的数据,什么样的顺序放进去的就需要什么样的顺序来提
//	sscanf(ch, "%s %d %f", tem.name, &(tem.age), &(tem.score));
//	printf("%s %d %f\n", tem.name, tem.age, tem.score);
//	return 0;
//}


//struct Stu
//{
//	char name[20];
//	int age;
//	float score;
//};
//int main()
//{
//	struct Stu s = { 0 };
//	FILE* pf = fopen("test.txt", "rb");//二进制写的方式
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//	fread(&s, sizeof(struct Stu), 1, pf);
//	printf("%s %d %f\n", s.name, s.age, s.score);
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}


//int main()
//{
//	FILE* pf = fopen("test.txt", "r");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//	int ch = 0;
//	ch = fgetc(pf);//a
//	printf("%c\n", ch);
//	ch = fgetc(pf);//b
//	printf("%c\n", ch);
//	ch = fgetc(pf);//c
//	printf("%c\n", ch);
//
//	//fseek(pf, 4, SEEK_SET);//起始位置,偏移4
//	//fseek(pf, 1, SEEK_CUR);//当前位置,偏移1
//	fseek(pf, -2, SEEK_END);//文件末尾,偏移-2
//
//	ch = fgetc(pf);//e
//	printf("%c\n", ch);
//	fclose(pf);
//	return 0;
//}


//int main()
//{
//	FILE* pf = fopen("test.txt", "r");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//	int ch = 0;
//	ch = fgetc(pf);//a
//	printf("%c\n", ch);
//	ch = fgetc(pf);//b
//	printf("%c\n", ch);
//	ch = fgetc(pf);//c
//	printf("%c\n", ch);
//
//	fseek(pf, -2, SEEK_END);
//
//	ch = fgetc(pf);//e
//	printf("%c\n", ch);
//	
//	printf("%d\n", ftell(pf));
//
//	rewind(pf);//文件指针回到起始位置
//	ch = fgetc(pf);
//	printf("%c\n", ch);
//
//	fclose(pf);
//	return 0;
//}

//int main()
//{
//	int ch = 0;//不能是char类型,以为要判断EOF(-1)
//	FILE* pf = fopen("test.txt", "r");
//	if (!pf)
//	{
//		perror("fopen");
//		return 1;
//	}
//	while ((ch = fgetc(pf)) != EOF)//读取字符
//	{
//		putchar(ch);
//	}
//
//	if (ferror(pf))//判断是否错误
//		printf("读取时出现I/O错误\n");
//	else if (feof(pf))//判断是否遇到文件结束标志
//		printf("遇到文件结束标志\n");
//	return 0;
//}

//enum { SIZE = 5 };
//int main(void)
//{
//	double a[SIZE] = { 1.,2.,3.,4.,5. };
//	FILE* fp = fopen("test.bin", "wb");
//	fwrite(a, sizeof * a, SIZE, fp); // 写 double 的数组
//	fclose(fp);
//	double b[SIZE];
//	fp = fopen("test.bin", "rb");
//	size_t ret_code = fread(b, sizeof * b, SIZE, fp); // 读 double 的数组
//	if (ret_code == SIZE) {
//		puts("Array read successfully, contents: ");
//		for (int n = 0; n < SIZE; ++n)
//			printf("%f ", b[n]);
//		putchar('\n');
//	}
//	//else { // error handling
//		if (feof(fp))
//			printf("Error reading test.bin: unexpected end of file\n");
//		else if (ferror(fp)) {
//			perror("Error reading test.bin");
//		}
//	}
//	fclose(fp);
//	fp = NULL;
//}

//enum{SIZE = 5};
//int main()
//{
//	double arr1[SIZE] = { 1.,2.,3.,4.,5., };
//	FILE* pf = fopen("test.txt", "wb");
//	if (!pf)
//	{
//		perror("fopen");
//		return 1;
//	}
//	//写
//	fwrite(arr1, sizeof * arr1, SIZE, pf);
//	fclose(pf);
//	//读
//	pf = fopen("test.txt", "rb");
//	if (!pf)
//	{
//		perror("fopen");
//		return 1;
//	}
//	double arr2[SIZE] = { '\0'};
//	size_t value = fread(arr2, sizeof * arr2, SIZE, pf);
//	if (value == SIZE)
//	{
//		printf("读取成功,数组内容是:\n");
//		for (int i = 0; i < SIZE; i++)
//			printf("%f ", arr2[i]);
//	}
//	else
//	{
//		if (ferror(pf))
//			printf("读取错误\n");
//		else if (feof(pf))
//			printf("遇到文件末尾\n");
//	}
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}

//int main()
//{
//	FILE* Open_File_Read = fopen("test1.txt", "r");
//	if (!Open_File_Read)
//	{
//		perror("fopen file1");
//		return 1;
//	}
//	FILE* Open_File_Write = fopen("test2.txt", "w");
//	if(!Open_File_Write)
//	{
//		fclose(Open_File_Read);
//		Open_File_Read = NULL;
//		perror("fopen file2");
//		return 1;
//	}
//
//	int ch = 0;
//	while ((ch = fgetc(Open_File_Read)) != EOF)
//	{
//		fputc(ch, Open_File_Write);
//	}
//
//	fclose(Open_File_Read);
//	Open_File_Read = NULL;
//	fclose(Open_File_Write);
//	Open_File_Write = NULL;
//	return 0;
//}

//int main()
//{
//	FILE* pf = fopen("test.txt", "w");
//	if (!pf)
//	{
//		perror("fopen");
//		return 1;
//	}
//
//	int ch = 0;
//	while ((ch = fgetc(pf)) != EOF)
//	{
//		fputc(ch, stdout);
//	}
//	printf("\nfeof:%d\n", feof(pf));
//	printf("ferror:%d\n", ferror(pf));
//
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}

#include <stdio.h>
#include <windows.h>
//vs2019
int main()
{
	FILE* pf = fopen("test.txt", "w");
	fputs("abcdef", pf);//先将代码放在输出缓冲区
	printf("睡眠10秒 已经写数据了,打开test.txt文件,发现文件没有内容\n");
	Sleep(10000);
	printf("刷新缓冲区\n");
	fflush(pf);//刷新缓冲区时，才将输出缓冲区的数据写到⽂件（磁盘）
	//注：fflush 在⾼版本的VS上不能使⽤了
	printf("再睡眠10秒 此时,再次打开test.txt文件,文件有内容了\n");
	Sleep(10000);//睡眠10秒是看fflush起作用还是fclose起作用
	fclose(pf);
	//注：fclose在关闭⽂件的时候，也会刷新缓冲区
	pf = NULL;
	return 0;
}

